import numpy as np

# 1 8*8 的棋盘，1、3、5、7行 和 0、2、4、6 列元素为1
# 1、3、5、7 列和0、2、4、6行也是1
z = np.zeros((8, 8), dtype=np.int32)
print(z)
z[1::2, ::2] = 1
z[::2, 1::2] = 1
print(z)

# 2求 矩阵的最大值，最小值
z = np.random.random((10, 10))
zmin, zmax = z.min(), z.max()

# 3 归一化，将矩阵规格化为0~1，最小的变成0，最大的变为1，等比例缩放
z = 10 * np.random.random((5, 5))
print(z)
zmin, zmax = z.min(), z.max()
z = (z - zmin) / (zmax - zmin)
print(z)

# 4 矩阵相加
z = np.ones((5, 5))
# 所有的行，都进行一个相加操作
z += np.arange(5)
print(z)

# 5 生成0~10之间均匀分布的11个数，包括0和10
z = np.linspace(0, 10, 11, endpoint=True, retstep=True)
print(z)
print('---')

# 6 交换矩阵其中的两行
a = np.arange(25).reshape(5, 5)
print(a)
print('---')
# 交换矩阵的第一第二行
a[[0, 1]] = a[[1, 0]]
print(a)
print('---')
# 交换矩阵的第一第二列, 思路，使用A的转置
a.T[[0, 1]] = a.T[[1, 0]]
print(a.T.T)

# 7 找出数组中与给定值最接近的数
# 记得用绝对值
z = np.array([[5.21, 1, 2, 3],
              [4, 5, 6, 7]])
print(z)
a = 5.21
print(np.abs(z - a).argmin())

# 8 判断二维矩阵中有没有一整列数为0
z = np.random.randint(0,3,(2,10))
print(z)
# 全是0 返回false
print(z.any(axis=0))